import http from 'wechat-http'

// 设定baseURL
http.baseURL = 'https://live-api.itheima.net/'

// 设定响应拦截器
http.intercept.response = async res => {
  console.log('响应', res)
  if (res.statusCode === 401) {
    // 当token失效时，刷新tokne
    // 不一定能更新成功，如此便返回到登录页
    if (res.config.url.includes('/refreshToken')) {
      // 取得当前页地址，强制返回
      const pageStack = getCurrentPages()
      const currentPages = pageStack[pageStack.length - 1]
      const url = currentPages.route
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${url}`
      })
    }
    const refreshToken = getApp().refreshToken
    console.log('refreshToken:', refreshToken)
    const { data } = await http({
      url: 'refreshToken',
      method: 'post',
      header: {
        Authorization: refreshToken
      }
    })
    // 将得到的两个新的token都存储起来
    getApp().setToken(data.token, data.refreshToken)
    // 无感请求，改变请求头中的token以后，重新发送页面的请求
    return http({
      ...res.config,
      header: {
        Authorization: `Bearer ${data.token}`
      }
    })
  }
  return res.data
}

// 设置请求拦截器
http.intercept.request = config => {
  // 拿到token
  const token = getApp().token
  // console.log(token)
  // 有token就放到请求头中
  if (token) {
    config.header = config.header || {}
    // 每次发送请求时，这都会去用全局保存的token强制覆盖
    // 该写法不允许在全局token错误时对其进行修改，所以当token本身错误的情况下，情况会很糟糕
    config.header.Authorization = config.header.Authorization || token
  }
  return config
}

// 全局使用
wx.http = http
